// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import VueResource from 'vue-resource';

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import Storage from './model/Storage'
import config from './config/config'

Vue.config.productionTip = false

//VUE——全局变量模块或全局方法挂载到Vue.prototype里使用
// https://blog.csdn.net/qq_36111804/article/details/82878202
Vue.prototype.$storage=Storage;
Vue.prototype.$config=config;

//自己写的样式
import './style/theme.css'
import './style/characters.css'

// 注册vue-resource
Vue.use(VueResource);
// 注册element-ui
Vue.use(ElementUI)
// Vue.http.options.emulateJSON = true; // 设置为true 以form表单方式提交
/**
 * vue 路由拦截器 beforeEach和afterEach
 * 在路由跳转的时候，我们需要一些权限判断;这个时候就需要使用路由的钩子函数
 * to: Route: 即将要进入的目标 路由对象
 * from: Route: 当前导航正要离开的路由
 * next(): 进行管道中的下一个钩子。如果全部钩子执行完了，则导航的状态就是 confirmed (确认的)
 * afterEach 钩子不会接受 next 函数也不会改变导航本身：
 */
//路由拦截器进行登录校验
router.beforeEach((to, from, next) => {
  if (to.meta.requireAuth) {
    let user = Storage.get('user');
    // Storage.get('JSESSIONID');

    if (!user) {
      next({path: '/'});
    } else {
      next();
    }

    // if (storage.get('platformUser')) {
    //   store.dispatch('loginUser', JSON.parse(storage.get('platformUser')));    //将用户信息存储到vuex中，供全局使用
    //   next();
    // } else {
    //   store.dispatch('initLoginModal', {state: true});     //显示登录弹窗
    //   next();
    // }
  } else {
    next();
  }
});

// router.afterEach((to, from) => {
//   // ...
// })



const UNAUTHORIZED_CODE = 401;

/**
 * 神坑: vue-resource 调用restful接口会先发送一次option请求
 * vue-resource 拦截器使用
 * https://blog.csdn.net/qq_41882147/article/details/80743730
 * https://my.oschina.net/u/3041966/blog/1607207
 * 添加统一的request的参数
 * 比如header中加入X-Requested-With，比如客户端需要实现sign和token的验证机制，比如你可以写$http.get(‘/files’, params)，拦截器帮你拼接成 http://www.xxxx.com/1/files 这样的请求地址
 * 处理统一的responseError
 * 比如重连机制，拿到error.code错误码重连，比如token过期，重新拿到token再次send request
 * 比如统一报错信息，给所有返回的404来个提示也会很酷
 */
//拦截http请求中返回401状态码，并针对其显示登录弹窗
Vue.http.interceptors.push((request, next) => {
  //此处this为请求所在页面的Vue实例
  // modify request
  // modify headers
  // request.headers.set('X-CSRF-TOKEN', 'TOKEN');
  // console.log("start")
  // if (request.url.indexOf("login") < 0) {
  //   console.log("start")
  //   console.log("enter")
  // }
  let user = Storage.get("user");
  if (user != null) {
    request.headers.set('token', Storage.get("user").token );
  }

  // request.headers.set('Authorization', 'Bearer TOKEN');

  // continue to next interceptor

  next((response) => {//在响应之后传给then之前对response进行修改和逻辑判断。对于token时候已过期的判断，就添加在此处，页面中任何一次http请求都会先调用此处方法
    // console.log(response)
    //response.body = '...';
    return response;

  });
});

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})
